package com.david;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.*;

/**
 * 配置类
 * 配置的是uri所对应的handler
 *
 * 匹配uri的规则，请求方法：put和post
 */
@Configuration
public class FluxRouter {


    //每一个router 对应是一个handler
    //每一个handler对应的一个处理器
    //定义这个bean的目的是为了覆盖原本netty中的RouterFunction功能，实现自定义
    @Bean
    public RouterFunction<ServerResponse> routerFlux(FluxHandler handler){
        return

                RouterFunctions.
                        //predicate 匹配规则
                        route(
                                RequestPredicates.path("001")
                                       .and(RequestPredicates.method(HttpMethod.POST))
                                       .and(RequestPredicates.accept(MediaType.TEXT_PLAIN))//接受的数据类型：二进制、文本文档、Json
                                       ,request->ServerResponse.ok().body(BodyInserters.fromValue("xxoo")))
                        //匹配多条
                        .andRoute(RequestPredicates.GET("/002"),handler::getXXX)
                        .andRoute(RequestPredicates.GET("/003"),handler::getJsonXXX)
                        .andRoute(RequestPredicates.GET("/004"),handler::getParams)
                        .andRoute(RequestPredicates.GET("/005/{id}/{name}"),handler::getPath)//匹配的时候格式需要一致


                ;


    }
}
